

package com.scs.application.modules.settlement.entity;

import com.alibaba.fastjson.annotation.JSONField;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.scs.application.core.model.DataEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
import lombok.experimental.Accessors;
import org.hibernate.validator.constraints.Length;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.util.List;

/**
 * 开票单实体对象
 */
@TableName("invoice")
@Data
@EqualsAndHashCode(callSuper = false)
@ToString(callSuper = true)
@Accessors(chain = true)
public class Invoice extends DataEntity implements Serializable {

    /** 单号 */
    private String code;

    /** 院方ID */
    @NotBlank(message="院方ID不能为空")
    @Length(min=1, max=20, message="院方ID长度必须介于 1 和 20 之间")
    private String hospitalId;

    /** 院方名称 */
    @NotBlank(message="院方名称不能为空")
    @Length(min=1, max=50, message="院方名称长度必须介于 1 和 50 之间")
    private String hospitalName;

    /** 供应商ID */
    private String supplierId;

    /** 供应商名称 */
    private String supplierName;

    /** 开票时间 */
    @NotNull(message="开票时间不能为空")
    @JSONField(format = "yyyy-MM-dd")
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private java.util.Date gmtMakeOut;

    /** 开始时间 */
    @JSONField(format = "yyyy-MM-dd")
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private java.util.Date gmtStart;

    /** 结束时间 */
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    @JSONField(format = "yyyy-MM-dd")
    private java.util.Date gmtEnd;

    /** 开票人 */
    private String drawer;

    /** 开票金额 */
    @NotNull(message="开票金额不能为空")
    private Double totalAmount;

    /** 税务发票号 */
    private String invoiceNo;

    /** 备注 */
    @Length(max=100, message="备注长度必须介于 0 和 100 之间")
    private String remark;

    /** 审核人 */
    private String auditorName;

    /** 审核时间 */
    private java.util.Date gmtAudited;

    /** 状态 */
    private Integer status;

    /** 同步状态 */
    private Integer syncStatus;

    /**期号*/
    private String periodNo;

    /**分组条件*/
    private String groupByCondition;


    /**科室*/
    @TableField(exist = false)
    private String deptName;

    /** yyyy年MM月 */
    @TableField(exist = false)
    private String periodNoDate;

    /** 数量合计*/
    @TableField(exist = false)
    private String totalNum;

    /** 金额合计*/
    @TableField(exist = false)
    private String totalMoney;

    /** 第三方订单Id */
    private String thirdOrderId;


    /**
     * 发票抬头-名称
     */
    @TableField(exist = false)
    private String spInvoiceName;

    /**
     * 发票抬头-税号
     */
    @TableField(exist = false)
    private String spInvoiceNo;

    /**
     * 发票抬头-单位地址
     */
    @TableField(exist = false)
    private String spInvoiceAddress;

    /**
     * 发票抬头-开户银行
     */
    @TableField(exist = false)
    private String spInvoiceBankName;

    /**
     * 发票抬头-银行账号
     */
    @TableField(exist = false)
    private String spInvoiceBankNo;

    /**
     * 发票抬头-电话号码
     */
    @TableField(exist = false)
    private String spInvoiceTel;

    /**
     * 发票抬头-名称
     */
    @TableField(exist = false)
    private String hosInvoiceName;

    /**
     * 发票抬头-税号
     */
    @TableField(exist = false)
    private String hosInvoiceNo;

    /**
     * 发票抬头-单位地址
     */
    @TableField(exist = false)
    private String hosInvoiceAddress;

    /**
     * 发票抬头-开户银行
     */
    @TableField(exist = false)
    private String hosInvoiceBankName;

    /**
     * 发票抬头-银行账号
     */
    @TableField(exist = false)
    private String hosInvoiceBankNo;

    /**
     * 发票抬头-电话号码
     */
    @TableField(exist = false)
    private String hosInvoiceTel;

    @TableField(exist = false)
    List<String> billItemIdListAdd;
}
